package com.example.prodecttest.result;


public class Results {

    /**
     * 创建Result 参数：返回状态 status  提示信息 message   返回数据 data
     * @return result
     */
    public static <T> Result<T> build(int status, String message, T data, boolean bl) {
        return new Result<>(status, message, data,bl);
    }

    /**
     * 创建Result 参数：返回状态 status  提示信息 message   返回数据 data  返回数据2  attach
     * @return
     */
    public static <T> Result<T> build(int status, String message, T data, Object attach, boolean bl) {
        return new Result<>(status, message, data,attach,bl);
    }
    /**
     * 创建Result 参数：枚举 resultConstants  返回数据 data
     * @return
     */
    public static <T> Result<T> build(ResultConstants resultConstants, T data, boolean bl) {
        return build(resultConstants.status, resultConstants.message, data, bl);
    }
    /**
     * 创建Result 参数：枚举 resultConstants  返回数据 data  返回数据2  attach
     * @return
     */
    public static <T> Result<T> build(ResultConstants resultConstants, T data, T attach, boolean bl) {
        return build(resultConstants.status, resultConstants.message, data,attach,bl);
    }


    /**
     * 返回默认成功  不带任何数据
     * @return
     */
    public static Result ok() {
        return build(ResultConstants.SUCCESS.status, ResultConstants.SUCCESS.message, null,true);
    }
    /**
     * 返回默认成功  带返回数据
     * @return
     */
    public static <T> Result<T> ok(T data) {
        return build(ResultConstants.SUCCESS.status, ResultConstants.SUCCESS.message, data,true);
    }


    /**
     * 返回默认成功  带返回数据两个
     * @return
     */
    public static <T> Result<T> ok(T data, Object attach) {
        return build(ResultConstants.SUCCESS.status, ResultConstants.SUCCESS.message, data,attach,true);
    }
    /**
     * 返回默认成功  带返回数据和成功提示消息
     * @return
     */
    public static <T> Result<T> ok(String message, T data) {
        return build(ResultConstants.SUCCESS.status, message, data,true);
    }

    /**
     * 返回默认成功  带返回数据和成功提示枚举
     * @return
     */
    public static <T> Result<T> ok(ResultConstants resultConstants, T data) {
        return build(resultConstants.status, resultConstants.message, data,true);
    }

    /**
     * 返回默认失败，不带数据
     * @return
     */
    public static Result fail() {
        return build(ResultConstants.FAIL.status, ResultConstants.FAIL.message, null,false);
    }
    /**
     * 返回，根据枚举来返回，不带数据
     * @return
     */
    public static Result fail(ResultConstants resultConstants) {
        return build(resultConstants.status, resultConstants.message, null,false);
    }
    /**
     * 返回，根据枚举来返回，不带数据
     * @return
     */
    public static <T> Result<T> fail(ResultConstants resultConstants, T obj) {
        return build(resultConstants.status, resultConstants.message, obj,false);
    }
    /**
     * 返回失败，自定义错误消息
     * @return
     */
    public static Result fail(String message) {
        return build(ResultConstants.FAIL.status, message, null,false);
    }

    /**
     * 返回，失败code和自定义错误消息
     * @return
     */
    public static Result fail(Integer status, String message) {
        return build(status, message, null,false);
    }

    /**
     * 返回，失败code和自定义错误消息
     * @return
     */
    public static <T> Result<T> fail(Integer status, String message, T data) {
        return build(status, message, data,false);
    }
    /**
     * 返回失败,自定义错误消息和返回数据
     * @return
     */
    public static <T> Result<T> fail(String message, T data) {
        return build(ResultConstants.FAIL.status, message, data,false);
    }
}
